iT邦幫忙

2024 iThome 鐵人賽

DAY 9
0
Kubernetes

一起來看 Kubernetes 官方文件吧!系列 第 10

Day10 - 一起來看 Kubernetes 官方文件吧!- kubeadm 的管理機制

  • 分享至 

  • xImage
  •  

因為出國玩不小心中斷了... 不過還是有一些內容想繼續研究的,就還是打算盡力完成這次的系列文吧~


前言

昨日我們透過 kubeadm config 指令產生了 config 檔案用於初始化,但若是後續要調整設定的話要如何做呢?來看看官方的建議吧 ~

今日目標

  • 調整以 kubeadm 建立的 cluster

Administration with kubeadm

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/

這個章節主要包含以下重點:

  1. 管理憑證
  2. 配置 cgroup driver
  3. 重新配置 k8s clsuter
  4. 更新流程

Reconfiguring a kubeadm cluster

kubeadm 目前還沒辦法自動化的調整配置,需要自己使用 operator 的方式實作

前置作業如下:

  1. 必須是以 kubeadm 建立的 cluster
  2. 有 admin 的憑證 (通常是位於機器上的 /etc/kubernetes/admin.conf),並且可以連線至 kube-apiserver

可透過以下指令修改 k8s cluster 內的元件,並指定編輯器:

KUBECONFIG=/etc/kubernetes/admin.conf KUBE_EDITOR=nano kubectl edit <parameters>

而修改完配置後,cluster 內的配置通常不會直接更新,需要手動執行指令,下面會再講各種不同情況如何處理。

更新  ClusterConfiguration

ClusterConfiguration 的欄位是存在 configmap 中,可使用以下指令修改:

kubectl edit cm -n kube-system kubeadm-config

目前我們的 cluster 還沒修改過,所以內容就跟初始化時大同小異:

apiVersion: v1
data:
  ClusterConfiguration: |
... 
    controlPlaneEndpoint: 192.168.75.10:6443
    controllerManager: {}
    dns: {}
    scheduler: {}
kind: ConfigMap
metadata:
  name: kubeadm-config
  namespace: kube-system
                                                                                                                                              

在 control plane nodes 上的更新

在 ClusterConfiguration 的欄位中包含了 control plane 元件的修改,上述因為沒有調整的關係,可看到 scheduler, controllerManager 都是 {} (空物件)

  • extraArgs :要帶入 control plane 元件的參數, requires updating the list of flags passed to a component container
  • extraVolumes - requires updating the volume mounts for a component container
  • SANs - requires writing new certificates with updated Subject Alternative Names

手動執行更新

官方文件在介紹完 kubectl edit cm -n kube-system kubeadm-config 之後,是透過以下指令套用:

# For Kubernetes control plane components
kubeadm init phase control-plane <component-name> --config <config-file>
# For local etcd
kubeadm init phase etcd local --config <config-file>

有點有趣的是,上面是修改 k8s 的 configmap,結果這邊的指令需要指定一個 config-file,官方沒有解釋如何取得
我們可以透過 kubectl get 的方式拿到,如下範例:

 kubectl get cm -n kube-system kubeadm-config  -o jsonpath={.data.ClusterConfiguration} > config.yaml
 kubeadm init phase control-plane apiserver --config ./config.yaml

執行完指令後,該節點上的 /etc/kubernetes/manifest 檔案就會調整為 config 的內容。

除了 kubeadm init phase 外,筆者也會使用 kubeadm upgrade node,但指定同版本的方式來更新 control plane 的配置。
因為在更新過程中,會透過 ClusterConfiguration 來配置 manifest

Applying kubelet configuration changes

kubeletkubeadm 雷同,也是先修改 configmap:

kubectl edit cm -n kube-system kubelet-config

kubelet 的更新步驟就比較完整了:

  • 登入到可執行 kubeadm 的節點
  • 執行 kubeadm upgrade node phase kubelet-config 指令,會直接把檔案載入至 /var/lib/kubelet/config.yaml
  • 編輯 /var/lib/kubelet/kubeadm-flags.env 調整一些額外的啟動參數(如果有的話)
  • 重啟 kubelet: systemctl restart kubelet

Applying kube-proxy configuration changes

kube-proxy 是透過 configmap 帶入,且是以 daemonset 帶起的服務,因此就是修改 configmap + 重啟服務即可:

# 編輯 configmap
kubectl edit cm -n kube-system kube-proxy
# 重啟 kube-proxy
kubectl -n kube-system rollout restart ds kube-proxy

Applying CoreDNS configuration changes

CoreDNS 是用 deployment 帶起的服務,因此直接調整即可:

kubectl edit deployment -n kube-system coredns
kubectl edit service -n kube-system kube-dns

Persisting the reconfiguration

要特別注意當更新 k8s cluster 時,執行 kubeadm upgrade 會導致某些設定會被覆蓋,大致分成三項:

  1. Node 上的設定:如 labels, taints, CRI socket 等等,可透過 kubectl patch 的方式處理
  2. control plane component:在執行 kubeadm upgrade 時加上 --patches 的參數,此 patch 檔案要與 ClusterConfiguration  持續同步
  3. kubelet:執行 kubeadm upgrade 時會使用 kubelet-config configMap 蓋過原本磁碟上的設定,必須在升級後手動更新,以及 /var/lib/kubelet/kubeadm-flags.env,此檔案會蓋過相關的 KubeletConfiguration 選項 (但要確保某些 flags 沒有被棄用)

結論

kubeadm 指令的功能蠻多,也是目前最主流的安裝方式
之後應該會再把所有 kubeadm 的指令拿出來好好看看 ~~

參考

https://kubernetes.io/docs/tasks/administer-cluster/kubeadm/

https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/control-plane-flags/#patches


上一篇
Day09 - 一起來看 Kubernetes 官方文件吧!- 使用 kubeadm 安裝 HA-cluster (下)
下一篇
Day11 - 一起來看 Kubernetes 官方文件吧!- Node Shutdowns
系列文
一起來看 Kubernetes 官方文件吧!19
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言